/**
在 TypeScript 中，函数的可选参数是指在函数调用时可以选择性地传入的参数。可选参数的使用可以使函数更加灵活，允许调用者根据需要提供参数。
  1. 可选参数的定义
  可选参数通过在参数名后面添加  `?`  符号来定义。可选参数必须放在必需参数的后面。

   示例：
  function greet(name: string, greeting?: string): string {
      return greeting ? `${greeting}, ${name}!` : `Hello, ${name}!`;
  }
  2. 可选参数的使用

  在调用包含可选参数的函数时，可以选择性地省略该参数。

   示例：
  console.log(greet("Alice"));          // 输出: Hello, Alice!
  console.log(greet("Bob", "Hi"));      // 输出: Hi, Bob!
  3. 可选参数与必需参数的顺序

  在定义函数时，必须将可选参数放在必需参数的后面。否则，TypeScript 会报错。

   示例：
  // 错误示例：可选参数在必需参数前面
  function example(greeting?: string, name: string): string {
      return `${greeting}, ${name}!`;
  }
  4. 可选参数的类型

  可选参数可以是任意类型，包括基本类型、对象类型、数组类型等。

   示例：
  function logMessage(message: string, level?: "info" | "warn" | "error"): void {
      if (level) {
          console.log(`[${level}] ${message}`);
      } else {
          console.log(message);
      }
  }

  logMessage("这是一个信息");                  // 输出: 这是一个信息
  logMessage("这是一个警告", "warn");           // 输出: [warn] 这是一个警告
  5. 可选参数与默认参数的结合

  可选参数可以与默认参数结合使用，以提供更灵活的函数定义。

   示例：
  function multiply(a: number, b: number = 1): number {
      return a * b;
  }

  console.log(multiply(5));     // 输出: 5
  console.log(multiply(5, 2));  // 输出: 10
  6. 结论

  可选参数是 TypeScript 中一个非常有用的特性，它允许函数在调用时灵活地接收参数。通过合理使用可选参数，可以提高函数的灵活性和可读性。在实际开发中，建议将可选参数放在必需参数之后，并结合默认参数使用，以实现更好的代码设计。
 */

// y就是一个可选参数
// 可选参数类型是什么? number | undefined 联合类型
function foo(x: number, y?: number) {
  if (y !== undefined) {
    console.log(x + y)
  } else {
    console.log(x)
  }
}

foo(10)
foo(10, 20)

export {}
